package com.yoouce.patchmng.util;


import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;

/**
 * sft工具类
 * Created by Scott.Lee on 15-9-30.
 */
public class SftpUtil {


    /*
     * scp ip地址
     */
    private String scpIp;

    /*
     * scp 端口号
     */
    private int scpPort;

    /*
     * scp 用户名
     */
    private String username;

    /*
     * scp 密码
     */
    private String password;

    /**
     * 默认构造方法，加载系统配置的默认连接
     *
     * @param ip       主机IP
     * @param userName 主机登陆用户名
     * @param password 主机登陆密码
     * @param port     主机ssh2登陆端口，如果取默认值，传-1
     */

    public SftpUtil(String ip, Integer port, String userName, String password) {
        //scp ip地址
        this.scpIp = ip;
        //scp 端口号
        this.scpPort = port;
        //scp 用户名
        this.username = userName;
        //scp 密码
        this.password = password;
    }


    /**
     * 创建文件夹
     */
    public void sshSftpMkdir(String file) throws Exception {
        Session session;
        Channel channel;

        JSch jsch = new JSch();


        if (scpPort <= 0) {
            //连接服务器，采用默认端口
            session = jsch.getSession(username, scpIp);
        } else {
            //采用指定的端口连接服务器
            session = jsch.getSession(username, scpIp, scpPort);
        }

        //如果服务器连接不上，则抛出异常
        if (session == null) {
            throw new Exception("session is null");
        }

        //设置登陆主机的密码
        session.setPassword(password);//设置密码
        //设置第一次登陆的时候提示，可选值：(ask | yes | no)
        session.setConfig("StrictHostKeyChecking", "no");
        //设置登陆超时时间
        session.connect(3000);

        try {
            //创建sftp通信通道
            channel = (Channel) session.openChannel("sftp");
            channel.connect(1000);
            ChannelSftp sftp = (ChannelSftp) channel;


            sftp.mkdir(file);


//            //列出服务器指定的文件列表
//            Vector v = sftp.ls("*.txt");
//            for(int i=0;i<v.size();i++){
//                System.out.println(v.get(i));
//            }

//            //以下代码实现从本地上传一个文件到服务器，如果要实现下载，对换以下流就可以了
//            OutputStream outStream = sftp.put("1.txt");
//            InputStream inStream = new FileInputStream(new File(uploadFile));
//
//            byte b[] = new byte[1024];
//            int n;
//            while ((n = inStream.read(b)) != -1) {
//                outStream.write(b, 0, n);
//            }
//
//            outStream.flush();
//            outStream.close();
//            inStream.close();
            channel.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.disconnect();
        }
    }


}
